﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Follow.Business;
using System.Windows.Forms;

namespace Follow.Cadastros
{
    public partial class Produto : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["idUsuario"] == null)
            {
                Response.Redirect("../Default.aspx");
            }
            else
            {
                Common.ValidaPermissoes valida = new Common.ValidaPermissoes();
                bool possuiPermissao = valida.validaPermissaoPorTela("Produto", Convert.ToInt32(Session["idGrupoUsuario"]));

                if (possuiPermissao == false)
                {
                    Response.Redirect("../permissaoNegada.aspx");
                }

                if (Request["Msg"] != null)
                {
                    divMsg1.Visible = true;
                    divMsg1.Attributes["class"] = "isa_info";
                    lblMsg1.Text = Request["Msg"].ToString();
                }
                this.PopulaProdutos();
            }
        }

        private void PopulaProdutos()
        {
            ProdutoBO bo = new ProdutoBO();
            gvProdutos.DataSource = bo.findAll();
            gvProdutos.DataBind();

            if (gvProdutos.Rows.Count == 0)
                lblMsgGrid.Visible = true;
        }

        private void PopulaProdutoByName()
        {
            lblMsgGrid.Visible = false;
            ProdutoBO bo = new ProdutoBO();
            gvProdutos.DataSource = bo.findByName(txtPesquisa.Text, ckbPesquisa.Checked);
            gvProdutos.DataBind();
            if (gvProdutos.Rows.Count == 0)
                lblMsgGrid.Visible = true;
        }

        protected void btnPesquisa_Click(object sender, EventArgs e)
        {
            divMsg1.Visible = false;
            this.PopulaProdutoByName();
        }

        protected void btnIncluir_Click(object sender, EventArgs e)
        {
            lblTituloView2.Text = "Incluir novo produto";
            LimparCampos();
            mvProdutos.ActiveViewIndex = 1;
            divMsg2.Visible = false;
            
        }

        protected void gvProdutos_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        protected void LimparCampos()
        {
            IDProduto.Value = "";
            txtNome.Text = "";
            ckbServico.Checked = false;
            txtDescricao.Text = "";
            txtDataCadastro.Text = "";
            txtCusto.Text = "";
            lblMsg2.Text = "";
            divMsg2.Visible = false;
            ckbAtivo.Checked = true;
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                Model.Produto produto = new Model.Produto();
                ProdutoBO bo = new ProdutoBO();
                if (IDProduto.Value != "")
                {
                    produto.IDProduto = Int32.Parse(IDProduto.Value);

                }

                produto.Servico = ckbServico.Checked ? true : false;
                produto.Nome = txtNome.Text;
                produto.Descricao = txtDescricao.Text;
                produto.DataCadastro = Convert.ToDateTime(txtDataCadastro.Text);
                produto.Custo = Convert.ToDecimal(txtCusto.Text);
                produto.Ativo = ckbAtivo.Checked ? true : false;
                bo.save(produto, Convert.ToInt32(Session["idUsuario"]));
                mvProdutos.ActiveViewIndex = 0;
                PopulaProdutoByName();
                divMsg1.Visible = true;
                divMsg1.Attributes["class"] = "isa_success";
                lblMsg1.Text = "Produto salvo com sucesso!";
            }
            catch (Exception ex)
            {
                divMsg2.Visible = true;
                if (ex.Message.IndexOf("duplicate") > -1)
                {
                    divMsg2.Attributes["class"] = "isa_warning";
                    lblMsg2.Text = "Produto já cadastrado no sistema.";
                }
                else
                {
                    divMsg2.Attributes["class"] = "isa_error";
                    lblMsg2.Text = "Erro: " + ex.Message;
                }             
            }
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            mvProdutos.ActiveViewIndex = 0;
            divMsg1.Visible = false;
        }

        protected void gvProdutos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("Editar"))
            {

                Int32 id = Convert.ToInt32(this.gvProdutos.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);

                if (id != null)
                {
                    if (id > 0)
                    {
                        LimparCampos();
                        ProdutoBO bo = new ProdutoBO();
                        Model.Produto p = bo.load(id);
                        ckbServico.Checked = p.Servico ? true : false;
                        txtNome.Text = p.Nome;
                        txtDescricao.Text = p.Descricao;
                        txtDataCadastro.Text = p.DataCadastro.ToShortDateString();
                        txtCusto.Text = Convert.ToString(p.Custo);
                        IDProduto.Value = p.IDProduto.ToString();
                        ckbAtivo.Checked = p.Ativo ? true : false;
                        lblTituloView2.Text = "Alterar produto";
                        mvProdutos.ActiveViewIndex = 1;
                        divMsg2.Visible = false;
                    }
                }
            }
            else if (e.CommandName.Equals("Excluir"))
            {
                if (System.Windows.Forms.MessageBox.Show("Tem certeza que deseja excluir?", "Excluir", MessageBoxButtons.OKCancel,
                    MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) ==
                    System.Windows.Forms.DialogResult.OK)
                {
                    Int32 id = 0;
                    try
                    {
                        id = Convert.ToInt32(this.gvProdutos.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    }
                    catch (Exception ex)
                    {
                        divMsg1.Visible = true;
                        divMsg1.Attributes["class"] = "isa_error";
                        lblMsg1.Text = "Erro: " + ex.Message;
                        return;
                    }
                    ProdutoBO bo = new ProdutoBO();
                    try
                    {
                        bo.delete(id, Convert.ToInt32(Session["idUsuario"]));
                        divMsg1.Visible = true;
                        divMsg1.Attributes["class"] = "isa_success";
                        lblMsg1.Text = "Produto excluído com sucesso!";

                        PopulaProdutos();
                    }
                    catch (Exception ex)
                    {
                        divMsg1.Visible = true;
                        divMsg1.Attributes["class"] = "isa_error";
                        lblMsg1.Text = "Erro: " + ex.Message;
                    }
                }
            }
        }

        protected void ckbPesquisa_CheckedChanged(object sender, EventArgs e)
        {
            
        }
    }
}